<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 引入Vue -->
    <script src="../../Vue_Origin/vue.js" type="text/javascript"></script> <!-- 开发使用的版本 -->
    <!-- <script src="../../Vue_Origin/vue.min.js" type="text/javascript"></script> // 生产使用的版本 -->

    <title>学习Vue的第六天</title>
</head>

<body>

    <!-- 创建容器 -->
    <div id="app">
        <h3>理解数据代理和Vue中的数据代理</h3>

        <!-- 数据代理:通过一个对象代理对另一个对象中属性的操作(读/写) -->
        <div id="model_id"><b>理解数据代理</b>
            <img src="../数据代理原理.png" alt="理解数据代理" srcset="">
        </div>
        <div id="model_id"><b>Vue中的数据代理</b></div>
        <h1>名称：{{ name }}</h1>
        <h1>地址：{{ address }}</h1>
        <!-- 数据代理:通过一个对象代理对另一个对象中属性的操作(读/写) -->
        <div id="model_id"><b>vue实例对象数据代理说明</b>
            <img style="width: 550px;" src="../vue实例对象数据代理说明.png" alt="vue实例对象数据代理说明" srcset="">
        </div>

    </div>

    <script type="text/javascript">
        //关闭vue在启动时生成生产提示
        Vue.config.productionTip = false

        // 理解数据代理
        let obj1 = { value1: '这个是对象一号' }
        let obj2 = { value2: '这个是对象二号' }

        Object.defineProperty(obj2, 'value1', {

            // 当有人读取obj2的value1属性时，get函数(getter)就会被调用，且返回值就是value1的值
            get() {
                console.log('有人读取obj2的value1属性了，此对象变量的值来源于obj1.value1')
                return obj1.value1
            },

            // 当有人修改obj2的value1属性时，set函数(setter)就会被调用，且会收到修改的具体值
            set(value) {
                console.log('有人读修改bj2的value1属性的值，此对象变量的值来源于obj1.value1且值是', value)
                obj1.value1 = value
            }
        })
        console.log('访问obj2', obj2);

        // Vue中的数据代理
        const vm = new Vue({
            el: '#app',
            data: {
                name: 'here is name',
                address: 'this is address'
            }
        })
    </script>
</body>

</html>